
package parserxml;

import java.util.*;

/**
 * @author Parra Jacob
 * @author Pimentel Victoria
 * @author Rodriguez Daniel
 * @author Velazquez Daniela
 */
public class RelacionER {

    private String nombreRelacion;
    private HashMap<String, Short> entidades;
    private HashMap<String, Boolean> atributos;
    private String absorbida;
    
    static final short MINMAX_01 = 0;
    static final short MINMAX_11 = 1;
    static final short MINMAX_0N = 2;
    static final short MINMAX_1N = 3;


    public RelacionER(String nombreRelacion) {
        this.nombreRelacion = nombreRelacion;
        this.entidades = new HashMap<String, Short>();
        this.atributos = new HashMap<String, Boolean>();
    }

    /*
     * Devuelve el nombre de la  relacion
     * @return the nombreRelacion
     */
    public String getNombreRelacion() {
        return nombreRelacion;
    }

    /**
     * Fija el atributo nombreRelacion
     * @param nombreRelacion the nombreRelacion to set
     */
    public void setNombreRelacion(String nombreRelacion) {
        this.nombreRelacion = nombreRelacion;
    }
    
    /**
     * Dado un nombre devuelve si es o no una entidad
     * @param nombreEntidad
     * @return True  si nombreEntidad es el nombre de una entidad
     *         False si no.
     */
    public boolean hasEntidad(String nombreEntidad) {
      return entidades.containsKey(nombreEntidad);
    }

    /**
     * Agrega una entidad a la lista de entidades
     * @param nombreEntidad
       @param minMax
     */
    public void addEntidad(String nombreEntidad, Short minMax) {
      entidades.put(nombreEntidad, minMax);
    }


    /**
     * Devuelve el conjunto de entidades existentes
     * @return Conjunto de todas las entidaes
     */
    public Collection<String> getEntidades() {
      return entidades.keySet();
    }

    /**
     * Dado el nombre de una entidad devuelve su cardinalidad
     * @param nombreEntidad
     * @return cardinalidad de una entidad
     */
    public short getMinMaxEntidad(String nombreEntidad) {
      return entidades.get(nombreEntidad);
    }

    /**
     * Agrega un atributo a la lista de atributos
     * @param nombreAtributo
     * @param requerido
     */
    public void addAtributo(String nombreAtributo, boolean requerido) {
      atributos.put(nombreAtributo, requerido);
    }

    /**
     * Dado el nombre de un atributo devuelve si es o no requerido
     * @param nombreAtributo
     * @return True  si nombreAtributo es un atributo requerido
     *         False si no.
     */
    public boolean isAtributoRequerido(String nombreAtributo) {
      return atributos.get(nombreAtributo);
    }

    /**
     * Dado el nombre de un atributo, se verifica si la relacion lo posee
     * @param nombreAtributo
     * @return True  si nombreAtributo pertenece a la relacion
     *         False si no.
     */
    public boolean hasAtributo(String nombreAtributo) {
      return atributos.containsKey(nombreAtributo);
    }
    public Collection<String> getAtributos() {
      return atributos.keySet();
    }


    /**Obtiene la propiedad absorbida
     * @return the absorbida
     */
    public String getAbsorbida() {
        return absorbida;
    }

    /**
     * @param absorbida the absorbida to set
     */
    public void setAbsorbida(String absorbida) {
        this.absorbida = absorbida;
    }
}
